const http = require('http');
const fs = require('fs');
const path = require('path');
const formidable = require('formidable');

// 创建上传目录（如果不存在）
const uploadDir = path.join(__dirname, 'upload');
if (!fs.existsSync(uploadDir)) {
    fs.mkdirSync(uploadDir);
}

// 处理请求
const server = http.createServer((req, res) => {
    // 设置跨域和内容类型
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Content-Type', 'text/html; charset=utf-8');

    // 路由处理
    switch (req.url) {
        case '/':
            // 显示上传页面
            fs.readFile(path.join(__dirname, 'index.html'), (err, data) => {
                if (err) {
                    res.statusCode = 500;
                    res.end('服务器错误');
                    return;
                }
                res.end(data);
            });
            break;
        
        case '/list.html':
            // 显示图片列表页面
            fs.readFile(path.join(__dirname, 'list.html'), (err, data) => {
                if (err) {
                    res.statusCode = 500;
                    res.end('服务器错误');
                    return;
                }
                res.end(data);
            });
            break;
        
        case '/upload':
            // 处理文件上传
            if (req.method.toLowerCase() === 'post') {
                const form = new formidable.IncomingForm();
                form.uploadDir = uploadDir;
                form.keepExtensions = true; // 保留文件扩展名
                
                form.parse(req, (err, fields, files) => {
                    if (err) {
                        res.statusCode = 500;
                        res.end('上传失败');
                        return;
                    }
                    
                    // 重定向到列表页
                    res.writeHead(302, { 'Location': '/list.html' });
                    res.end();
                });
            }
            break;
        
        case '/getlist':
            // 获取图片列表
            fs.readdir(uploadDir, (err, files) => {
                if (err) {
                    res.statusCode = 500;
                    res.end('获取列表失败');
                    return;
                }
                // 过滤非图片文件
                const imgFiles = files.filter(file => {
                    const ext = path.extname(file).toLowerCase();
                    return ['.jpg', '.jpeg', '.png', '.gif'].includes(ext);
                });
                res.end(JSON.stringify(imgFiles));
            });
            break;
        
        default:
            // 处理静态资源（上传的图片）
            if (req.url.startsWith('/upload/')) {
                const imgPath = path.join(__dirname, req.url);
                fs.exists(imgPath, (exists) => {
                    if (exists) {
                        fs.readFile(imgPath, (err, data) => {
                            if (err) {
                                res.statusCode = 500;
                                res.end('获取图片失败');
                                return;
                            }
                            // 设置正确的Content-Type
                            const ext = path.extname(imgPath).toLowerCase();
                            switch (ext) {
                                case '.jpg':
                                case '.jpeg':
                                    res.setHeader('Content-Type', 'image/jpeg');
                                    break;
                                case '.png':
                                    res.setHeader('Content-Type', 'image/png');
                                    break;
                                case '.gif':
                                    res.setHeader('Content-Type', 'image/gif');
                                    break;
                            }
                            res.end(data);
                        });
                    } else {
                        res.statusCode = 404;
                        res.end('图片不存在');
                    }
                });
            } else {
                res.statusCode = 404;
                res.end('页面不存在');
            }
    }
});

// 启动服务器
const port = 3000;
server.listen(port, () => {
    console.log(`服务器运行在 http://localhost:${port}`);
    console.log(`上传页面: http://localhost:${port}`);
    console.log(`图片列表: http://localhost:${port}/list.html`);
});